package edu.algo3.algoThief.domain;

import java.util.ArrayList;

import edu.algo3.algoThief.dao.Repositorio;

public class Ladron {

    private String apellido;

    private CaracteristicasLadron caracteristicas;

    private ObjetoRobado objetoRobado;

    private RutaDeEscape rutaDeEscape;

    public Ladron(Integer dificultad) {

        this.definirObjetoRobado(dificultad);
        this.definirRutaDeEscape();
        this.definirApellido(); // Elige un apellido al azar
        this.definirCaracteristicas();
    }
    
    public Ladron(Integer dificultad, String nombreJugador)
    {
        this.definirObjetoRobado(dificultad, nombreJugador);
        this.definirRutaDeEscape(nombreJugador);
        this.definirApellido(nombreJugador);
        this.definirCaracteristicas();
    }

    public Ladron(String sospechosoApellido) // Para generar un sospechoso
    {

        this.apellido = sospechosoApellido;
        this.caracteristicas = new CaracteristicasLadron(sospechosoApellido);
    }

    // getters

    public String getApellido() {

        return apellido;
    }

    public ObjetoRobado getObjetoRobado() {

        return objetoRobado;
    }

    public RutaDeEscape getRutaDeEscape() {

        return rutaDeEscape;
    }

    public CaracteristicasLadron getCaracteristicas() {

        return caracteristicas;
    }

    // setters

    private void definirApellido() {

        ArrayList<String> listaDeSospechoso = Repositorio.getSospechososApellidos();
        int numeroDeSospechoso = (int) (Math.random() * listaDeSospechoso.size());
        this.apellido = listaDeSospechoso.get(numeroDeSospechoso);
    }
    
    private void definirApellido(String jugadorNombre)
    {
    	this.apellido = Repositorio.cargarLadronApellido(jugadorNombre);
    }

    private void definirObjetoRobado(Integer dificultad) {

        switch (dificultad.intValue()) {
            case 1:
                this.objetoRobado = new ObjetoComun();
                break;
            case 2:
                this.objetoRobado = new ObjetoValioso();
                break;
            case 3:
                this.objetoRobado = new ObjetoMuyValioso();
                break;
        }
    }
    
    private void definirObjetoRobado(Integer dificultad, String jugadorNombre)
    {
        switch (dificultad.intValue()) {
        case 1:
            this.objetoRobado = new ObjetoComun(jugadorNombre);
            break;
        case 2:
            this.objetoRobado = new ObjetoValioso(jugadorNombre);
            break;
        case 3:
            this.objetoRobado = new ObjetoMuyValioso(jugadorNombre);
            break;
    }
    }

    private void definirRutaDeEscape() {

        ArrayList<Ciudad> ciudadesDeEscape = this.objetoRobado.definirEstrategiaDeEscape();
        this.rutaDeEscape = new RutaDeEscape(ciudadesDeEscape);
    }
    
    private void definirRutaDeEscape(String jugadorNombre)
    {
        ArrayList<Ciudad> ciudadesDeEscape = this.objetoRobado.definirEstrategiaDeEscape(jugadorNombre);
        this.rutaDeEscape = new RutaDeEscape(ciudadesDeEscape);
    }
    
    private void definirCaracteristicas() {
        this.caracteristicas = new CaracteristicasLadron(this.apellido);
    }
}
